Loose Coupling Nedir? Java’da Dependency Injection Örneği

Object-Oriented Programming (OOP) prensiplerine uygun bir şekilde esnek, sürdürülebilir ve modüler yazılım geliştirmek istiyorsak sınıflar arasındaki bağımlılıkları minimum seviyede tutmamız gerekir. Bu noktada Loose Coupling (Gevşek Bağlılık) prensibi devreye girer.

Kısa özet: Loose Coupling, sınıfların birbirine olan bağımlılığını azaltarak daha esnek ve sürdürülebilir yazılım geliştirmeyi sağlar. Bu yazıda Dependency Injection kullanarak Java’da gevşek bağlılık nasıl sağlanır örnek kodlarla inceleyeceğiz.

Spring Boot uygulamalarında dependency injection konusunu öğrenmek isterseniz Spring Boot CRUD örnekleri yazımıza da göz atabilirsiniz.


Coupling (Bağlılık) Nedir?

Yazılım geliştirme sürecinde bir sınıf başka bir sınıfa doğrudan bağlıysa bu durum Coupling (Bağlılık) olarak adlandırılır.

Örneğin bir sınıf içerisinde başka bir sınıfı şu şekilde oluşturursak:


Database database = new Database();

Bu durumda sınıfımız ilgili nesneye doğrudan bağımlı hale gelir. Bu da Tightly Coupled (Sıkı Bağlılık) oluşturur.

Problem: Sıkı bağlı sistemlerde bir bileşende yapılan değişiklik diğer sınıfları da etkileyebilir ve yazılımın bakım maliyetini artırır.

Loose Coupling (Gevşek Bağlılık) Nedir?

Loose Coupling, sınıfların birbirine olan bağımlılığını azaltmayı amaçlayan bir yazılım tasarım prensibidir.

Bu prensip sayesinde:

  • Sistem daha modüler hale gelir
  • Kod daha kolay test edilir
  • Yeni özellik eklemek kolaylaşır
  • Sistem değişikliklere daha dayanıklı olur

Loose coupling elde etmek için en yaygın kullanılan tekniklerden biri Dependency Injection (Bağımlılık Enjeksiyonu) yöntemidir.


Dependency Injection Nedir?

Dependency Injection, bir sınıfın ihtiyaç duyduğu bağımlılıkların o sınıf içerisinde oluşturulması yerine dışarıdan verilmesidir.

Bağımlılık enjeksiyonu genellikle üç şekilde yapılır:

  • Constructor Injection
  • Setter Injection
  • Field Injection

Bu yazıda Constructor Injection örneğini inceleyeceğiz.


Java’da Constructor Injection Örneği

Aşağıdaki örnekte DatabaseManager sınıfı farklı veritabanlarına bağlanabilmek için bir interface kullanmaktadır.

Bu sayede sadece kullanılan implementasyonu değiştirerek farklı veritabanlarına bağlanabiliriz.

Main Class


public class Main {

    public static void main(String[] args) {

        DatabaseManager databaseManager =
                new DatabaseManager(new Database_Mongo());

        databaseManager.connect();
    }
}

DatabaseManager Class


public class DatabaseManager {

    private IDatabase iDatabase;

    public DatabaseManager(IDatabase iDatabase) {
        this.iDatabase = iDatabase;
    }

    public void connect() {
        iDatabase.connect();
    }
}

Bu yapı sayesinde DatabaseManager herhangi bir veritabanına doğrudan bağlı değildir.

MySQL Implementasyonu


public class Database_Mysql implements IDatabase {

    public void connect() {

        System.out.println(
        "MySQL veritabanı ile bağlantı kuruldu");

    }
}

MongoDB Implementasyonu


public class Database_Mongo implements IDatabase {

    @Override
    public void connect() {

        System.out.println(
        "MongoDB veritabanı ile bağlantı kuruldu");

    }
}

IDatabase Interface


public interface IDatabase {

    void connect();

}

Loose Coupling Avantajları

  • Kod bağımlılıkları azalır
  • Sistem daha modüler hale gelir
  • Yeni veritabanı veya servis eklemek kolay olur
  • Unit test yazmak kolaylaşır
  • Kod okunabilirliği artar
  • Bakım maliyeti düşer

Sık Sorulan Sorular

Loose coupling neden önemlidir?
Loose coupling sayesinde sistem daha esnek olur ve yeni özellikler eklemek mevcut kodu bozmadan yapılabilir.
Dependency Injection ile loose coupling nasıl sağlanır?
Bağımlılıklar sınıf içinde oluşturulmak yerine dışarıdan verilerek sınıfların birbirine bağımlılığı azaltılır.
Spring Framework dependency injection kullanır mı?
Evet. Spring Framework ve Spring Boot, dependency injection mekanizmasını otomatik olarak yöneten IoC container yapısına sahiptir.

Sonuç

Loose Coupling, modern yazılım geliştirme süreçlerinde önemli bir tasarım prensibidir.

Dependency Injection kullanarak sınıflar arasındaki bağımlılıkları azaltabilir ve daha esnek yazılım mimarileri oluşturabilirsiniz.

Bu yaklaşım özellikle Spring Framework ve microservice mimarilerinde oldukça yaygın olarak kullanılmaktadır.

Umarız bu yazı sizler için faydalı olmuştur. Bir sonraki yazımızda görüşmek üzere.

Latest Software Developers - Yazılım Blog Yazarı Profil Resmi

Yazar

LatestSoftwareDevelopers

Blog where the most up-to-date software is followed. (En güncel yazılımların takip edildiği blog sitesi)

Java ile ilgili yorumlar

Yorum Paylaş

EMail Zorunlu alanlar * *